home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1994 / 6 / 01 / mini-compiler / asm / error.lib < prev    next >
Encoding:
Text File  |  1995-06-01  |  3.2 KB  |  123 lines

  1.        Idnt     _Error
  2.        Section  _Err,COde
  3.        Xref     Dosbase
  4.        Xref     Output_Handle
  5.        Xref     FileTab
  6.        Xdef     Error
  7.        Xdef     RoutNr
  8.        Xdef     RoutAdr
  9.  
  10. ; Stack : Rts.l      ; = Adresse an der Fehler auftrat +/- 6
  11. ;         D0 = ErrorCode
  12. ;    
  13. ; Stand : 09-Jun-93
  14. ;           Erstellt für Mini-Comp
  15. ;
  16. ;         Errorroutine, springt geregelt aus dem System aus
  17. ;         sollte später auch offene Dateien schließen
  18. ;
  19. ; Stand : 30-Jul-93
  20. ;         FileTabelle schließen
  21.  
  22.  
  23. Error: Lea     ErrNr,a0                 ; Hier ErrorNr
  24.        Bsr     Hundert                 ; Max 3 Stellen
  25.        Lea     ErrR,a0
  26.        Moveq   #0,d0
  27.        Move.w  RoutNr,d0             ; Nummer der Proc (0=Hauptprg)
  28.        Bsr     Hundert
  29.        Move.l  (sp)+,D0             ; RTS-Adresse
  30.        Subq.l  #6,D0                ; JSR-Offset abziehen
  31.        Sub.l   RoutAdr,d0              ; Basisadresse der Routine
  32.        Lea     ErrA,a0
  33.        Bsr     ZehnTaus
  34.        Move.l  Output_Handle,D1
  35.        Move.l  #ErrorTxt,D2
  36.        Moveq   #56,d3
  37.        Move.l  Dosbase,a6      
  38.        Jsr     -48(a6)                 ; Ausgeben
  39.  
  40.    ; -------------------------------
  41.    ; - Offene Dateien schließen
  42.    ;
  43.  
  44.        Lea       FileTab,a4           ; Basisadresse FileTabelle
  45.        Moveq   #0,d4              ; Index f. FileTabelle
  46. Tstlo   Tst.l   (a4,d4)              ; Filehandle eingetragen ?
  47.        beq.s   nein              ; Nein
  48.        Move.l  (a4,d4),d1           ; Filehandle
  49.        jsr       -36(a6)             ; Close (AmigaDos)
  50. nein       addq.l    #4,d4
  51.        cmp.w   #128,d4              ; Tabellenende erreicht ?
  52.        beq.s   Ende
  53.        bra.s   Tstlo
  54.  
  55. Ende    Move.l  (a5),a7             ; SP herstellen
  56.            addq.l  #4,a7                ; FP löschen
  57.            Rts
  58.  
  59.  
  60. ZehnTaus:
  61.            Move.l    #10000,d1
  62. ZTLo    Sub.l   d1,d0
  63.            Bpl.s    ok3
  64.            Bra.s      Tausend
  65. ok3     Addq.b    #1,(a0)
  66.            Bra.s   ZTLo
  67. Tausend Add.l   d1,d0
  68.            addq.l    #1,a0         ; Nächstes Zeichen
  69.            Move.l    #1000,d1      ; Nächste Potenz
  70. TaLo    Sub.l    d1,d0
  71.            Bpl.s   ok4
  72.         addq.l    #1,a0
  73.            add.l    d1,d0
  74.            Bra.s   Hundert
  75. ok4     Addq.b  #1,(a0)
  76.        bra.s    TaLo
  77. Hundert Moveq    #100,d1
  78. HunLoo  sub.l    d1,d0
  79.        Bpl.s    ok
  80.         Bra.s    Zehn
  81. ok      Addq.b   #1,(a0)
  82.         bra.s    HunLoo
  83. Zehn    Add.l    d1,d0
  84.        moveq    #10,d1
  85.        addq.l   #1,a0
  86. ZeLoo   Sub.l    d1,d0
  87.        Bpl.s    ok1
  88.        Bra.s    Eins
  89. ok1       Addq.b   #1,(a0)
  90.        Bra.s    ZeLoo
  91. Eins    Add.l    d1,d0
  92.        Addq.l   #1,a0
  93. ELoo    Subq.l   #1,d0
  94.        Bpl.s     ok2
  95.        Bra.s     ExStr
  96. ok2       Addq.b   #1,(a0)
  97.        bra.s    ELoo
  98. ExStr   Rts
  99.  
  100. ErrorTxt: Dc.b 'Laufzeitfehler '
  101. ErrNr     dc.b '000 in Routine '
  102. ErrR      dc.b '000 an Adresse '
  103. ErrA     dc.b '00000    ',10,13,0
  104.    ds.w 1          ; Align
  105. RoutNr    dc.w  1      ; Default : 1 = Hauptprg
  106. RoutAdr   dc.l  0
  107.        End
  108.  
  109. ; Fehlernummern der Laufzeit
  110. ;   Nr  | Grund
  111. ;  -----+-------------------------------
  112. ;    1  | Strings>255 Bytes
  113. ;    2  | chr(x) wobei nicht in 0..255
  114. ;    3  | Copy : Falsche Länge / Offset
  115. ;    4  | Open : FileTabelle ist voll
  116. ;    5  | Case : Else-Fall, aber kein Else definiert
  117. ;    6  | Arrayzugriff außerhalb der Grenzen 
  118. ;    7  | Prg-Abbruch vom Debugger 
  119. ;    8  | Division durch 0
  120. ;    9  | Sin,Cos,Tan Überlauf, oder LN <0
  121. ;   10  | File not Open
  122. ;  >200 | AmigaDos Fehler
  123.